객체 및 객체지향의 개념
객체의 개념
- 객체는 실세계에서 어떤 구체적 의미를 구성하는 하나의 실체 단위로서 특정 사물 및 개념을 말한다. 애플리케이션 관점에서는 필요로 하는 데이터와 그 위에 수행되는 메소드를 가진 작은 소프트웨어 모듈이다.
객체지향의 개념
- 객체지향이란 실세계의
개체(Entity)
를 속성(Attribute)
과 메소드(Method)
가 결합된 형태의 객체로(Object)
로 표현하는 개념이다.
객체의 구조 및 특성
객체 = 데이터(Data) + 메소드(Method)
- 다른 객체와 메시지 전달 방식으로 통신을 한다.
- 객체지향 세계에서는 객체와 메시지만 존재한다.
객체의 특성
- 상태(State)를 갖고 있다. (e.g. 자동차 객체는 ‘정지’, ‘이동’ 등의 상태 존재)
- 행위의 특징을 나타낼 수 있다. (e.g. 자동차 객체는 가속페달을 밟으면 가속)
- 식별성을 갖고 있다. (e.g. 자동차 번호판으로써 다른 자동차 객체와 식별성을 가짐)
- 기억장소를 갖고 있다. (e.g. 자동차는 도로 위에 있거나, 차고에 있거나, 항상 어떤 물리적 공간을 차지)
객체지향의 요소
객체(Object)
- 문제 영역에서 잘 정의된 역할을 갖고 있는 각각에 대해 구별 할 수 있는 단위
클래스(Class)
- 객체의 타입을 정의하는 템플릿(Template)
메시지(Message)
- 수신자 객체(Receiver)의 이름과 수신자가 수행할 메소드(Method)의 이름, 메소드 수행시 전달되는 인자(Argument)로 구성
객체지향의 특징
캡슐화(Encapsulation)
- 필요하지 않은 정보는 캡슐화하여 정보를 은닉하고 오직 메시지만으로 객체와 상호작용을 하게 하는 것이다.
- 정보에 대한 접근을 오직 메시지만으로 가능토록 한다.
- 객체의 내부 구조와 실체를 분리하여 내부의 변경이 애플리케이션에 미치는 영향을 최소화 한다.
추상화(Abstraction)
- 현실 세계의 사실을 객체로 표현하기 보다는 문제 영역의 중요한 측면을 주목하여 상세내역을 없애 나가는 과정이다.
- 복잡한 프로그램을 간단하게 하고 분석의 초점을 명확히 할 수 있다.
상속성(Inheritance)
- 클래스 계층을 기초로 클래스 내의 데이터와 메소드를 물려받아 새로운 객체를 생성하는 메커니즘이다.
- 클래스를 체계화하며 기존의 클래스로부터 확장이 용이하다.
- 중복코드의 감소 및 소프트웨어의 재사용성이 증대된다.
다형성(Polymorphism)
- 하나의 객체가 다수의 유형을 가질 수 있도록 지원하는 능력이다.
- 동일한 이름의 오퍼레이션이라도 오퍼레이션이 일어나는 클래스에 따라 각기 다른 행동을 수행한다.
- 하나의 함수 이름이나 심볼이 여러가지 목적으로 사용되는 경우를 의미한다.
관계성(Relationship)
- 객체 간의 상호참조하는 관계를 표현하는 방식이다.
- is member of: 연관성(Association), 참조 및 이용관계
- is part of: 집단화(Aggregation), 객체 간의 구조적인 집약 관계
- is a: 일반화(Generalization), 특수화 (Specialization), 클래스 간의 개념적인 포함 관계